#ifndef MENUSCENE_H
#define MENUSCENE_H
#include <cstddef>
#include <SFML/Graphics/Sprite.hpp>
#include <SFML/Graphics/String.hpp>
#include <SFML/Audio.hpp>
#include "scene.h"
#include "tiledsprite.h"

class MenuScene : public Scene {
	public:
	typedef void (*ButtonCallback)(void);
	// funciones de Scene que debemos definir
	void Init();
	void CleanUp();
	void ProcessEvent(const sf::Event &e);
	void Update(const float &dt);
	void Render(sf::RenderWindow &w);
		
	// funciones extra de la clase
	void AddButton(const std::string &caption, int buttonId);
	void onButtonClicked(int buttonId);
	
	sf::Music musica;
	bool reproduciendo;

	
	private:
	enum{
		ID_JUGAR_A=0,
		ID_JUGAR_B=1,
		ID_OPCIONES=2,
		ID_EXTRAS=3,
		ID_SALIR=4
	};
		
	struct MenuButton: public TiledSprite{
		int m_id;
		sf::String m_text;
		bool m_isSelected;	
	
		MenuButton(const std::string &img);
		void SetPosition(float x, float y);
		bool ContainsPoint(const sf::Vector2f &point) const;
		void Render(sf::RenderWindow &w) const;
		
	};
	
	int seleccionadoTeclado;
	
	bool bajarBoton;
	bool subirBoton; 	

	
	bool SeleccionButtonMouse();
	bool SeleccionButtonTeclado();

	protected:

		
	std::vector<MenuButton> buttons;	/// los botones del menu con sus respectivas funciones de respuesta
	sf::Sprite background;						/// fondo de la pantalla de menu

	sf::String strMensaje;
	
	// propiedades de los botones y el menu
	std::string buttonImage;			/// imagen de fondo para los botones
	sf::Color buttonTextColor;			/// color del texto de los botones para estado normal 
	sf::Color buttonTextColorSelected;	/// color del texto de los botones para estado seleccionado
	sf::Font buttonFont;				/// familia de fuente para el texto de los botones
	float buttonFontSize;				/// tamanio de la funete del texto de los botones
	sf::Vector2f menuPosition;			/// posicion del primero de los botones del menu (los demas se colocan debajo)
	float buttonPadding;				/// la separacion vertical entre los botones del menu
};

#endif

